package com.tiny.cqzcp.utils;

import java.util.ArrayList;

/**
 * @author jmz
 */
public class CombineUtil {

    private ArrayList<String> tmpArr = new ArrayList<>();
    private ArrayList<String> resultArr = new ArrayList<>();
    private Integer total = 0;

    public ArrayList<String> getResult(int index, int k, String[] arr) {
        resultArr.clear();
        combine(index, k, arr);
        return resultArr;
    }

    /**
     * 组合 按一定的顺序取出元素，就是组合,元素个数[C arr.len 3]
     * 
     * @param index
     *            元素位置
     * @param k
     *            选取的元素个数
     * @param arr
     *            数组
     */
    private void combine(int index, int k, String[] arr) {
        if (k == 1) {
            for (int i = index; i < arr.length; i++) {
                tmpArr.add(arr[i]);
                total++;
                resultArr.add(tmpArr.toString());
                tmpArr.remove((Object)arr[i]);
            }
        } else if (k > 1) {
            for (int i = index; i <= arr.length - k; i++) {
                // tmpArr都是临时性存储一下
                tmpArr.add(arr[i]);
                // 索引右移，内部循环，自然排除已经选择的元素
                combine(i + 1, k - 1, arr);
                // tmpArr因为是临时存储的，上一个组合找出后就该释放空间，存储下一个元素继续拼接组合了
                tmpArr.remove((Object)arr[i]);
            }
        } else {
            return;
        }
    }
}